--题目：输入一个整形数组，数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组，
--每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

function getTheSubMax(data)
	local subMax = 0 ;
	local subSum = 0 ;
	for i=1,#data do
		subSum = subSum + data[i] ;
		if(subSum<0)then
			subSum = 0 ;
		end
		if(subSum>subMax)then
			subMax = subSum ;
		end
	end

	--如果都是负数,则返回最大的那一个
	if(subMax==0) then
		subMax = data[1] ;
		for i=1,#data do
			if(data[i]>subMax) then
				subMax = data[i] ;
			end
		end
	end
	return subMax;
end

print(getTheSubMax({1, -2, 3, 10, -4, 7, 2, -5}));